package com.wenjiang.model.request;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.annotation.JSONField;
import com.wenjiang.utils.LanTuPayRequestUtils;
import lombok.Data;

import java.util.HashMap;
import java.util.Map;


/**
 * <p>
 * 抽象的
 * </p>
 *
 * @author lwj
 * @since 2024/11/28.
 */

@Data
public abstract class AbstractWxRequest {


    /**
     * <pre>
     * 字段名：商户号.
     * 变量名：mch_id
     * 是否必填：是
     * 示例值：1230000109
     * 描述：支付平台分配商户号
     * </pre>
     */
    @JSONField(name = "mch_id")
    private String mchId;

    /**
     * <pre>
     * 字段名：秒数时间戳.
     * 变量名：timestamp
     * 是否必填：是
     * 示例值：123231411
     * 描述：2分钟内的时间戳
     * </pre>
     */
    @JSONField(name = "timestamp")
    private String timestamp;


    /**
     * 生成的签名
     */
    @JSONField(name = "sign")
    protected String sign;


    /**
     * 获取需要签名的map
     * @return
     */
    public Map<String,String> signParams(){
        Map<String,String> paramMap = new HashMap<>();
        paramMap.put("mch_id",mchId);
        paramMap.put("timestamp",timestamp);
        paramMap.put("sign",sign);
        storeParams(paramMap);
        return  paramMap;
    }

    /**
     * 转换结构
     *
     * @return 字符串
     */
    public String toFormBody() {
        // 根据当前对象生成请求的form body结构字符串
        JSONObject jsonObject = (JSONObject) JSONObject.toJSON(this);
        Map<String,String> parmsMap = jsonObject.toJavaObject(Map.class);
        return LanTuPayRequestUtils.generateUrlEncode(Boolean.FALSE, parmsMap);
    }




    /**
     * 其它需要签名的参数
     * @return
     */
    public abstract Map<String,String> storeParams(Map<String,String> map);
}
